有关 VSDBCMD.EXE 的命令行参考(部署和架构导入)

更新:2010 年 7 月

可以使用 VSDBCMD.EXE 执行下列操作:

  • 将数据库架构从实时数据库导入 .dbschema 文件

  • 从 .dbschema 文件生成部署脚本

  • 从 .dbschema 文件生成部署脚本,并将该脚本部署至目标数据库

  • 通过比较两个.dbschema 文件生成部署脚本。

此外,您可以指定选项来自定义数据库的部署或导入方式。

有关如何使用此工具的更多信息,请参见如何:准备数据库以使用 VSDBCMD.EXE 从命令提示符处进行部署如何:从命令提示符处导入架构

重要说明重要事项

不能使用 VSDBCMD.EXE 部署数据层应用程序组件 (DAC) 项目或将架构导入至 DAC 项目。

常规选项

下表中的选项同时适用于部署和导入操作。

选项

缩写形式

是否必需?

注释

/Action:{Import|Deploy}

/a:{Import|Deploy}

指定是希望将对象和设置导入 .dbschema 文件,还是希望将 .dbschema 文件部署到目标服务器或数据库。

/ConnectionString:"String"

/cs:"String"

指定目标数据库的连接字符串。 例如,您可以指定 /cs:"Data Source=MyDatabase/SQL2K8;Integrated Security=True;Pooling=False;Initial Catalog=AdventureWorks2008"。 要导入架构,必须通过使用 Initial Catalog 指定数据库名称。 有关连接字符串的语法的更多信息,请参见连接字符串语法 (ADO.NET)

/DatabaseSchemaProvider:DspName

/dsp:DspName

指定您正连接的数据库架构提供程序的类型。 例如,对 SQL Server 使用 /dsp:SQL。

@File

不可用

可以指定包含一个或多个命令行选项的响应文件。

/Quiet[+|-]

/q

指定是否希望禁止 VSDBCMD 的详细反馈。

/DeployToDatabase[+|-]

/dd

指定要生成部署脚本并将其部署到目标数据库。 如果未指定此选项,则将生成部署脚本,但不会部署该脚本。

/ModelFile:FileName

/model:FileName

指定要部署或要在导入架构时创建的 .dbschema 文件的名称。 如果您指定部署清单,那么不需要这个。

/Properties:PropertyName=PropertyValue

/p:PropertyName=PropertyValue

指定要在命令提示符处重写的属性名称和值。 有关为这些操作指定的属性,请参阅部署选项和导入选项。

部署选项

下表中的选项仅在部署 .dbschema 文件时适用。

选项

缩写形式

是否必需?

注释

/ManifestFile:FileName

/manifest:FileName

指定要在部署数据库时使用的部署清单文件。 生成数据库项目时,在生成输出路径中创建部署清单。

注意注意
如果部署清单文件引用了已存在且为只读的输出脚本文件,则部署将失败。

/DeploymentScriptFile:FileName

/script:FileName

指定要给予部署脚本的名称。

/ExtensionArguments

/ext:String

指定传递给自定义部署参与者的参数的名称/值对。

/TargetModelFile: 文件名

/targetmodel: 文件名

指定将与源.dbschema 比较的目标.dbschema 文件的名称。 当您希望通过比较两个 .dbschema 文件生成部署脚本时,使用此选项。 有关更多信息,请参见 使用 VSDBCMD.EXE 比较架构

提示

创建增量部署脚本时,源和目标数据库的名称必须匹配。

在命令行上重写单个 SQLCMD 变量

可以使用以下语法重写单个 SQLCMD 变量的值:

/p: SqlCmdVariableName =

如果指定一个 .sqlcmdvars 文件中未声明的变量名,则将发生错误。

可以在三个时候指定 SQLCMD 变量,它们按以下顺序应用:

  1. 设计时, 在 .deployment 清单指向的 Database.sqlcmdvars 中

  2. 在命令行上制定 /p:SqlCommandVariablesFile=Filepath

  3. 在命令行上指定特定变量的名称和值

第二个方法重写第一个方法,并且第三个方法重写第二个和第一个方法。

常见部署属性

在命令提示符下部署 .dbschema 文件时,您可以指定下表中的属性。

选项

默认值

注释

/p:AbortOnFirstError={True|False}

True

指定在第一次发生错误时是否应取消部署。

/p:AlwaysCreateNewDatabase={True|False}

False

指定在部署更改时,是应更新数据库还是删除并重新创建数据库。

/p:AnsiNulls={True|False}

默认值为源模型中此设置的值

指定 ANSI_NULLS 连接设置。 此设置会重写模型中的值。

/p:AnsiPadding={True|False}

默认值为源模型中此设置的值

指定 ANSI_PADDING 连接设置。 此设置会重写模型中的值。

/p:AnsiWarnings={True|False}

默认值为源模型中此设置的值

指定 ANSI_WARNINGS 连接设置。 此设置会重写模型中的值。

/p:ArithAbort={True|False}

默认值为源模型中此设置的值

指定 ARITH_ABORT 连接设置。 此设置会重写模型中的值。

/p:BlockIncrementalDeploymentIfDataLoss={True|False}

True

指定在可能发生数据丢失的情况下是否希望停止部署。

/p:CheckNewConstraints={True|False}

True

指定在创建或重新创建约束时,默认情况下是否将使用 NOCHECK 选项创建约束。 在部署脚本的结尾,将添加一个语句块,以将所有约束作为一个集合进行检查。 通过将此属性设置为 True,您可以通过将数据校验推迟到部署脚本的结尾来部署架构,而不会遇到数据错误,这些错误由部署进程中间的校验或外键约束造成。

/p:CollationPreference={UseSourceModelCollation | UseTargetModelCollation }

UseSourceModelCollation

指定在比较源和目标模型时使用的排序规则。

/p:CommentOutSetVarDeclarations={True|False}

False

指定是否需要为要在部署脚本中注释掉的变量指定值的 SETVAR 语句。 如果要使用 SQLCMD 部署脚本并在命令提示符下为这些变量指定值,则可以将此属性设置为 True。

/p:ConcatNullYieldsNull={True|False}

默认值为源模型中此设置的值

指定 CONCAT_NULL_YIELDS_NULL 连接设置。 此设置会重写模型中的值。

/p:DeployDatabaseProperties={True|False}

True

指定是应将数据库属性设置为部署脚本的一部分还是应更新为部署脚本的一部分。

/p:DeploymentCollationPreference={UseSourceModelCollation|UseTargetModelCollation|DontChangeCollations}

DontChangeCollations

此设置指示在部署期间如何处理数据库排序规则。 有三个可能的值:UseSourceModelCollation 表示如果它与源指定的排序规则不匹配,目标数据库排序规则将更新。 UseTargetModelCollation 指示应使用目标数据库(或服务器)排序规则。 DontChangeCollations 指示不应更改服务器的排序规则。

/p:DeploymentConfigurationFile=fileName

.deploymanifest 文件指定的.sqldeployment 文件。

指定在部署时要使用的 .sqldeployment 文件。

/p:DisableAndReenableDdlTriggers={True|False}

True

指定是否在部署过程开始时禁用数据定义语言 (DDL) 触发器,在部署过程结束时重新启用它。

/p:DoNotUseAlterAssemblyStatementsToUpdateCLRTypes={True|False}

False

指定存在差异时部署应始终除去并重新创建程序集,而不是发布 ALTER ASSEMBLY 语句。

/p:DropConstraintsNotInSource={True|False}

True

指定在将更新部署到数据库时,是否将从目标数据库删除数据库项目中不存在的约束。

/p:DropIndexesNotInSource={True|False}

True

指定在将更新部署到数据库时,是否将从目标数据库中删除数据库项目中不存在的索引。

/p:EnforceMinimalDependencies={True|False}

False

指定是否分析并解释过程体、标量函数体和表值函数体。 如果启用此设置,则将不会标识这些主体中的依赖项,但会标识对对象定义所做的更改。 通过将此选项设置为 True,您可能会提高性能,但缺失的依赖项可能会在部署时导致问题。

/p:GenerateDatabaseOptions={True|False}

True

指定在部署数据库时,部署脚本是否应包含设置数据库选项的语句。

/p:GenerateDeployStateChecks={True|False}

True

指定在部署数据库方案之前,是否希望部署脚本包含验证目标数据库状态的语句。

/p:GenerateDropsIfNotInProject={True|False}

False

指定在将更新部署到数据库时,是否删除源对象中不存在的目标数据库中的对象。

/p:IgnoreAnsiNulls={True|False}

False

指定在将更新部署到数据库时,是应忽略还是应更新 ANSI Null 设置方面的差异。

/p:IgnoreAuthorizer={True|False}

False

指定在将更新部署到数据库时,是应忽略还是应更新授权者方面的差异。

/p:IgnoreColumnCollation={True|False}

False

指定在将更新部署到数据库时,是应忽略还是应更新列排序规则方面的差异。

/p:IgnoreComments={True|False}

False

指定在将更新部署到数据库时,是应忽略还是应更新注释方面的差异。

/p:IgnoreCryptographicProviderFilePath={True|False}

False

指定在将更新部署到数据库时,是应忽略还是应更新加密提供程序的文件路径方面的差异。

/p:IgnoreDdlTriggerState={True|False}

False

指定在将更新部署到数据库时,是应忽略还是应更新数据定义语言 (DDL) 触发器的启用状态或禁用状态之间的差异。

/p:IgnoreDefaultSchema={True|False}

False

指定在将更新部署到数据库时,是应忽略还是应更新默认架构方面的差异。

/p:IgnoreDmlTriggerOrder={True|False}

False

指定在将更新部署到数据库时,是应忽略还是应更新数据操作语言 (DML) 触发器的顺序方面的差异。

/p:IgnoreDmlTriggerState={True|False}

False

指定在将更新部署到数据库时,是应忽略还是应更新 DML 触发器的启用状态或禁用状态之间的差异。

/p:IgnoreExtendedProperties={True|False}

False

指定在将更新部署到数据库时,是应忽略还是应更新扩展属性方面的差异。

/p:IgnoreFilegroupPlacement={True|False}

True

指定在将更新部署到数据库时,是应忽略还是应更新文件组中对象位置方面的差异。

/p:IgnoreFillFactor={True|False}

True

指定在将更新部署到数据库时,是应忽略索引存储的填充因子方面的差异,还是应发出警告。

/p:IgnoreIdentitySeed={True|False}

False

指定在将更新部署到数据库时,是应忽略还是应更新标识列种子方面的差异。

/p:IgnoreIncrement={True|False}

False

指定在将更新部署到数据库时,是应忽略还是应更新标识列增量方面的差异。

/p:IgnoreIndexOptions={True|False}

False

指定在将更新部署到数据库时,是应忽略还是应更新索引选项方面的差异。

/p:IgnoreIndexPadding={True|False}

True

指定在将更新部署到数据库时,是应忽略还是应更新索引填充方面的差异。

/p:IgnoreKeywordCasing={True|False}

True

指定在将更新部署到数据库时,是应忽略还是应更新关键字的大小写方面的差异。

/p:IgnoreLockHintsOnIndexes={True|False}

False

指定在将更新部署到数据库时,是应忽略还是应更新索引的锁定提示方面的差异。

/p:IgnoreLoginSids={True|False}

False

指定在将更新部署到数据库时,是应忽略还是应更新安全标识号 (SID) 方面的差异。

/p:IgnoreObjectPlacementOnPartitionSchema={True|False}

True

指定在将更新部署到数据库时,是应忽略还是应更新已分区表或文件组索引的分区映射方面的差异。

/p:IgnorePermissions={True|False}

False

指定在将更新部署到数据库时,是应忽略还是应更新权限方面的差异。

/p:IgnoreQuotedIdentifiers={True|False}

False

指定在将更改部署到数据库时,是应忽略还是应更新带引号的标识符设置方面的差异。

/p:IgnoreRoleMembership={True|False}

False

指定在将更新部署到数据库时,是应忽略还是应更新登录的角色成员资格方面的差异。

/p:IgnoreRouteLifetime={True|False}

True

指定在将更新部署到数据库时,是应忽略还是应更新 SQL Server 保留路由表中路由的时间量之间的差异。

/p:IgnoreSemicolonBetweenStatements={True|False}

True

指定在将更新部署到数据库时,是将忽略还是将更新 Transact-SQL 语句之间的分号方面的差异。

/p:IgnoreStatisticsSample={True|False}

True

指定在将更新部署到数据库时,是将忽略还是将更新用于 CREATE STATISTICS 的示例方面的差异。

/p:IgnoreTableOptions={True|False}

False

指定在将更新部署到数据库时,是将忽略还是将更新表选项方面的差异。

/p:IgnoreUserSettingsObjects={True|False}

False

指定在将更新部署到数据库时,是将忽略还是将更新用户设置对象方面的差异。

/p:IgnoreWhitespace={True|False}

True

指定在将更新部署到数据库时,是将忽略还是将更新空白方面的差异。

/p:IgnoreWithNocheckOnCheckConstraints={True|False}

False

指定在将更新部署到数据库时,是将忽略还是将更新 CHECK 约束的 WITH NOCHECK 子句值方面的差异。

/p:IgnoreWithNocheckOnForeignKeys={True|False}

False

指定在将更新部署到数据库时,是将忽略还是将更新外键的 WITH NOCHECK 子句值方面的差异。

/p:IncludeTransactionalScripts={True|False}

False

指定在部署到数据库时,是否应在可能的位置使用事务性语句。

/p:NumericRoundAbort={True|False}

默认值为源模型中此设置的值

指定 NUMERIC_ROUNDABORT 连接设置。 此设置会重写模型中的值。

/p:PerformDatabaseBackup={True|False}

False

指定是否应在进行任何更改之前备份目标数据库。

/p:QuotedIdentifier={True|False}

默认值为源模型中此设置的值

指定 QUOTED_IDENTIFIER 连接设置。 此设置会重写模型中的值。

/p:SingleUserMode={True|False}

False

指定在更新期间是否应将数据库置于单用户模式。

/p:SqlCommandVariablesFile=FileName

.deploymanifest 文件中指定的 .sqlcmdvars 文件。

指定在部署时要使用的 .sqlcmdvars 文件。

/p:TargetDatabase="String"

不可用

指定要部署的数据库的名称。

/p:TreatVerificationErrorsAsWarnings={True|False}

False

指定是否应将部署验证期间遇到的错误视为警告。 在对目标数据库执行生成的部署计划之前,将对该计划执行检查。 计划验证过程将检测丢失仅适用于目标的对象(如索引)之类的问题,必须删除这些对象才能进行更改。 验证过程还将检测以下情况:由于存在对复合项目的引用,因而存在依赖项(如表或视图),但这些依赖项不存在于目标数据库中。 您可能会选择这样做以获取所有部署问题的完整列表,而不是在出现第一个错误时停止部署。

/p:UnmodifiableObjectWarnings={True|False}

True

指定在对象中发现无法修改的差异时(例如,当某个文件的文件大小或文件路径不同时),是否应生成警告。

/p:VerifyDeployment={True|False}

True

指定是否应在部署之前执行检查,并在发现可能会阻止部署成功的问题时停止部署。 例如,如果目标数据库上的外键在数据库项目中并不存在,并且这种情况在部署时将导致错误,则部署可能将停止。

您可以通过在命令提示符下键入以下命令来显示部署属性的完整列表:

VSDBCMD /? /a:Deploy /dsp:sql /cs:" ConnectionString "

常见导入属性

下表中的属性仅在将对象和设置导入至 .dbschema 文件时适用。

选项

默认值

注释

/p:IgnoreExtendedProperties={True|False}

False

指定是应忽略还是应导入扩展属性。

/p:IgnorePermissions={True|False}

False

指定是应忽略还是应导入权限。

注意注意
此设置的默认值不同于使用导入架构向导导入时的默认值。

您可以通过在命令提示符下键入以下命令来显示导入属性的完整列表:

VSDBCMD /? /a:Import /dsp:sql /cs:" ConnectionString "

要部署到多个环境的示例命令行

可以使用 VSDBCMD 将 .dbschema 文件部署到多个目标环境中。 在本示例中,将 EnterpriseDB.dbschema 部署到开发、测试和生产环境中。

开发环境

"%programfiles%\Microsoft Visual Studio 10.0\vstsdb\deploy\vsdbcmd" 
/a:Deploy 
/manifest:EnterpriseDB.deploymanifest 
/p:DeploymentConfigurationFile=Development.sqldeployment 
/p:SqlCommandVariablesFile=Development.sqlcmdvars 
/cs:"Data Source=DEV\sql2008;Integrated Security=true"

测试环境

"%programfiles%\Microsoft Visual Studio 10.0\vstsdb\deploy\vsdbcmd" 
/a:Deploy 
/manifest:EnterpriseDB.deploymanifest 
/p:DeploymentConfigurationFile=UserTest.sqldeployment 
/p:SqlCommandVariablesFile=UserTest.sqlcmdvars 
/cs:"Data Source=USERTEST\sql2008;Integrated Security=true"

生产环境

"%programfiles%\Microsoft Visual Studio 10.0\vstsdb\deploy\vsdbcmd" 
/a:Deploy 
/manifest:EnterpriseDB.deploymanifest 
/p:DeploymentConfigurationFile=Production.sqldeployment 
/p:SqlCommandVariablesFile=Production.sqlcmdvars 
/cs:"Data Source=PRODUCTION\sql2008;Integrated Security=true"

对于每个环境,您可以提供特定于目标环境的部署配置、SQLCMD 变量文件和连接字符串。

所有环境都共享部署清单。 部署清单包括要部署的 .dbschema 文件的名称。

请参见

任务

如何:准备数据库以使用 VSDBCMD.EXE 从命令提示符处进行部署

概念

生成数据库并将其部署到临时或生产环境中

数据库项目设置概述

修订记录

Date

修订记录

原因

2010 年 7 月

添加了连接字符串的示例。 添加了 /targetmodelfile 的说明。

客户反馈

2011 年 4 月

更正了 BlockIncrementalDeploymentIfDataLoss 的名称,并添加了有关创建增量部署脚本的说明。

客户反馈